package com.inspinia.upms.rpc.api;

import com.inspinia.base.pagination.Pager;
import com.inspinia.base.service.BaseService;
import com.inspinia.upms.common.model.dept.UpmsDept;
import com.inspinia.upms.common.model.dept.UpmsDeptVo;

import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.List;

/**
 * 部门管理 服务层
 * 
 * @author ruoyi
 */
public interface UpmsDeptService extends BaseService<UpmsDept> {

    /**
     * 批量删除部门
     *
     * @param ids 部门id数组
     */
    int batchDelete(Long[] ids);

    /**
     * 分页
     * @param departmentVo
     * @return
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     */
    Pager<UpmsDeptVo> findPage(UpmsDeptVo departmentVo) throws InvocationTargetException, IllegalAccessException;

    /**
     * 根据组织机构id找到部门id集合
     *
     * @param orgIds 组织机构id
     * @return
     */
    List<Long> findDeptIdsByOrgIds(Collection<Long> orgIds);

    /**
     * 查找用户所在机构的所有部门
     *
     * @param userId 用户id
     * @return
     */
    List<UpmsDept> findDeptByUserOrg(Long userId);

    /**
     * 查找所有的部门
     */
    List<UpmsDept> findAll();

    /**
     * 查找用户所有部门的id
     *
     * @param userId 用户id
     * @return
     */
    List<Long> findDeptIdsByUserId(Long userId);

    /**
     * 查找用户所有部门的名称
     *
     * @param userId 用户id
     * @return
     */
    List<String> findNamesByUserId(Long userId);

    /**
     * 获取部门vo数据
     *
     * @param id 部门id
     * @return
     */
    UpmsDeptVo getVo(long id) throws InvocationTargetException, IllegalAccessException;

    /**
     * 根据部门id获取机构id
     *
     * @param deptId 部门id
     * @return
     */
    Long getOrgId(Long deptId);

    /**
     * 根据id获取部门的名称
     *
     * @param deptId 部门id
     * @return
     */
    String getName(Long deptId);

    /**
     * 查找用户所在的部门
     *
     * @param userId 用户id
     * @return 部门集合
     */
    List<UpmsDept> findByUserId(Long userId);

    /**
     * 查找部门的组织机构id
     *
     * @param deptIds 部门id集合
     * @return 部门所在的机构id
     */
    List<Long> findOrgIds(List<Long> deptIds);

    /**
     * 查找某城市下某部门的id
     *
     * @param cityId   城市id
     * @param deptName 部门名称
     * @return
     */
    List<Long> findDeptIds(Long cityId, String deptName);

    /**
     * 获取部门电话
     *
     * @param userId
     * @return
     */
    String findPhone(Long userId);

    /**
     * 根据部门ids获取所有用户
     */
    List<Long> findUserIdsByDeptId(List<Long> deptIds);

    /**
     * 根据部门id获取公章
     * @param deptId
     * @return
     */
    String getOfficialSealUrlByDeptId(Long deptId);

    /**
     * 根据机构id查询部门信息
     * @param orgId
     * @return
     */
    List<UpmsDept> findByOrgId(Long orgId);

    /**
     * 查找用户所在机构的所有部门 (不包含自己的部门)
     *
     * @param userId 用户id
     * @return
     */
    List<UpmsDept> findDeptByUserOrgExcludeOneSelf(Long userId);
    /**
     * 查找用户所在机构的所有部门 (不包含自己的部门)
     *
     * @param userId 用户id
     * @param noOneSelf 不显示发起部门
     * @param createDeptId
     * @return
     */
    List<UpmsDept> findDeptByUserOrgExcludeOneSelfAndDept(Long userId, Boolean noOneSelf, Long createDeptId);

    /**
     * 查找指挥中心的名称
     * @param orgId
     * @return
     */
    UpmsDept findCommandCenterNameByOrgId(Long orgId);

    /**
     * 查找某个机构下，某个部门的id
     * @param orgId
     * @param deptName
     * @return
     */
    List<Long> findDeptIdsInOrg(Long orgId, String deptName);
}
